import axios from 'axios';
import { getStore, setStore } from './storage';
import router from '../router/index';
import { Message } from 'element-ui';
// 统一请求路径前缀
let base = '';
// 超时设定
// axios.defaults.timeout = 150000;

//////////////////////

// axios.defaults.timeout = 150000;
//axios.defaults.baseURL = "http://localhost:8080/"//getStore('IP') || location.origin
//axios.defaults.baseURL = "http://47.244.138.13/"//getStore('IP') || location.origin
axios.defaults.baseURL = getStore('IP') || location.origin


////////////////////////
//axios.defaults.baseURL = getStore('IP') || location.origin

axios.interceptors.request.use(config => {
    return config;
}, err => {
    Message.error('请求超时');
    return Promise.resolve(err);
});

// http response 拦截器
axios.interceptors.response.use(response => {
    const data = response.data;
    // 根据返回的code值来做不同的处理(和后端约定)
    switch (data.code) {
        case '401':
            // 未登录 清除已登录状态
            setStore('token', '');
            router.push('/login');
            break;
        case 403:
            // 没有权限
            if (data.message !== null) {
                Message.error(data.message);
            } else {
                Message.error("未知错误");
            }
            break;
        case 500:
            // 错误
            if (data.message !== null) {
                Message.error(data.message);
            } else {
                Message.error("未知错误");
            }
            break;
        default:
            return data;
    }

    return data;
}, (err) => {
    // 返回状态码不为200时候的错误处理
    Message.error(err.toString());
    return Promise.resolve(err);
});

export const getRequest = (url, params) => {
    let token = getStore('token');
    return axios({
        method: 'get',
        url: `${base}${url}`,
        params: params,
        headers: {
            'token': token
        }
    });
};

export const postRequest = (url, params) => {
    let token = getStore("token");
    return axios({
        method: 'post',
        url: `${base}${url}`,
        data: params,
        // transformRequest: [function (data) {
        //     let ret = '';
        //     for (let it in data) {
        //         ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
        //     }
        //     return ret;
        // }],
        headers: {
            'Content-Type': 'application/json',
            'token': token
        }
    });
};

export const putRequest = (url, params) => {
    let token = getStore("token");
    return axios({
        method: 'put',
        url: `${base}${url}`,
        data: params,
        transformRequest: [function (data) {
            let ret = '';
            for (let it in data) {
                ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
            }
            return ret;
        }],
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'token': token
        }
    });
};

export const deleteRequest = (url, params) => {
    let token = getStore('token');
    return axios({
        method: 'delete',
        url: `${base}${url}`,
        params: params,
        headers: {
            'token': token
        }
    });
};

export const uploadFileRequest = (url, params) => {
    let token = getStore('token');
    return axios({
        method: 'post',
        url: `${base}${url}`,
        params: params,
        headers: {
            'token': token
        }
    });
};